查看原文
其他

单细胞分析十八般武艺7:CellChat

The following article is from 生信会客厅 Author Kinesin

单细胞测序技术的发展日新月异,新的分析工具也层出不穷。每个工具都有它的优势与不足,在没有权威工具和流程的单细胞生信江湖里,多掌握几种分析方法和工具,探索数据时常常会有意想不到的惊喜。

往期回顾

单细胞初级8讲和高级分析8讲
单细胞分析十八般武艺1:harmony
单细胞分析十八般武艺2:LIGER
单细胞分析十八般武艺3:fastMNN
单细胞分析十八般武艺4:velocyto
单细胞分析十八般武艺5:monocle3
单细胞分析十八般武艺6:NicheNet

CellChat简介

CellChat的特点

  1. 全面的数据:大多数的细胞通讯分析方法通常只考虑配体/受体基因对,往往忽略了多亚基复合物受体和其他信号辅助因子。CellChat的作者人工挑选了2021个经过验证的细胞通讯关系,构建了新的细胞通讯参考数据库——CellChatDB。它不仅考虑了多亚基受体情况,还收录了其他重要的信号辅助因子:可溶性激动剂,拮抗剂,共刺激和共抑制膜结合受体。
  2. 高深的算法:CellChat在分析过程中使用了多种分析方法,不仅有常见的秩和检验、置换检验、SNN、KNN、UMAP,还有非负矩阵分解、社会网络分析、质量作用定律等不常用的方法。能灵活运用这么多方法分析数据,足以说明作者具有深厚的算法功底。
  3. 丰富的可视化结果:CellChat提供丰富且美观的可视化结果,有网络图、桑基图、热图、气泡图、散点图等多种图形。

安装CellChat

安装依赖项

## R环境安装NMF和ComplexHeatmap包
devtools::install_github("renozao/NMF@devel")
devtools::install_github("jokergoo/ComplexHeatmap")

## shell环境安装
pip install umap-learn  #如果报错,可使用conda安装
#conda install umap-learn

安装CellChat

devtools::install_github("sqjin/CellChat")

CellChat实践

数据来源

为了方便大家对比不同的分析方法,我们继续使用《单细胞分析十八般武艺6:NicheNet》的数据。数据下载链接:https://zenodo.org/record/3531889/files/seuratObj.rds

初始分析

library(CellChat)
library(tidyverse)
library(ggalluvial)
rm(list=ls())
options(stringsAsFactors = FALSE)

##提取表达矩阵和细胞分类信息
scRNA <- readRDS(url("https://zenodo.org/record/3531889/files/seuratObj.rds"))
scRNA <- UpdateSeuratObject(scRNA)
# CellChat要求输入标准化后的表达数据
data.input <- GetAssayData(scRNA, assay = "RNA", slot = "data")
identity <- subset(scRNA@meta.data, select = "celltype")

##创建cellchat对象
cellchat <- createCellChat(data = data.input)
cellchat <- addMeta(cellchat, meta = identity, meta.name = "labels")
cellchat <- setIdent(cellchat, ident.use = "labels"
groupSize <- as.numeric(table(cellchat@idents)) # 后面有用

##设置参考数据库
# 选择合适的物种,可选CellChatDB.human, CellChatDB.mouse
CellChatDB <- CellChatDB.mouse  
# 使用"Secreted Signaling"用于细胞通讯分析
CellChatDB.use <- subsetDB(CellChatDB, search = "Secreted Signaling"
# 将数据库传递给cellchat对象
cellchat@DB <- CellChatDB.use 

##配体-受体分析
# 提取数据库支持的数据子集
cellchat <- subsetData(cellchat)
# 识别过表达基因
cellchat <- identifyOverExpressedGenes(cellchat)
# 识别配体-受体对
cellchat <- identifyOverExpressedInteractions(cellchat)
# 将配体、受体投射到PPI网络
cellchat <- projectData(cellchat, PPI.mouse)

推断细胞通讯网络

##推测细胞通讯网络
cellchat <- computeCommunProb(cellchat)
cellchat <- computeCommunProbPathway(cellchat)
cellchat <- aggregateNet(cellchat)

细胞通讯网络系统分析及可视化

levels(cellchat@idents)            #查看细胞顺序
vertex.receiver = c(3, 6)          #指定靶细胞的索引
cellchat@netP$pathways             #查看富集到的信号通路
pathways.show <- "CCL"             #指定需要展示的通路
# Hierarchy plot
png(filename = "sig_pathway_hierarchy.png", width = 1000, height = 650)
netVisual_aggregate(cellchat, signaling = pathways.show,  vertex.receiver = vertex.receiver, vertex.size = groupSize)
dev.off()
# Circle plot
png(filename = "sig_pathway_cricle.png", width = 650, height = 600)
netVisual_aggregate(cellchat, signaling = pathways.show, layout = "circle", vertex.size = groupSize)
dev.off()
# 计算配体-受体对信号网络的贡献度
png(filename = "sig_pathway_L-R.png", width = 800, height = 600)
netAnalysis_contribution(cellchat, signaling = pathways.show)
dev.off()
# 分析细胞在信号网络中角色
cellchat <- netAnalysis_signalingRole(cellchat, slot.name = "netP")
png(filename = "sig_pathway_role.png", width = 800, height = 600)
netVisual_signalingRole(cellchat, signaling = pathways.show)
dev.off()

sig_pathway_hierarchy

sig_pathway_cricle

sig_pathway_L-R

sig_pathway_role

##细胞通讯模式和信号网络
nPatterns = 5   #默认为5
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "outgoing", k = nPatterns)
# river plot
p = netAnalysis_river(cellchat, pattern = "outgoing")
ggsave("com_pattern_outgoing_river.png", p, width = 12, height = 6)
# dot plot
p = netAnalysis_dot(cellchat, pattern = "outgoing")
ggsave("com_pattern_outgoing_dot.png", p, width = 9, height = 6)

nPatterns = 5
cellchat <- identifyCommunicationPatterns(cellchat, pattern = "incoming", k = nPatterns)
# river plot
p = netAnalysis_river(cellchat, pattern = "incoming")
ggsave("com_pattern_incoming_river.png", p, width = 12, height = 6)
# dot plot
p = netAnalysis_dot(cellchat, pattern = "incoming")
ggsave("com_pattern_incoming_dot.png", p, width = 9, height = 6)

com_pattern_outgoing_river

com_pattern_outgoing_dot

com_pattern_incoming_river

om_pattern_incoming_dot

##信号网络聚类
# 按功能相似性聚类
cellchat <- computeNetSimilarity(cellchat, type = "functional")
cellchat <- netEmbedding(cellchat, type = "functional")
cellchat <- netClustering(cellchat, type = "functional")
# Visualization in 2D-space
p = netVisual_embedding(cellchat, type = "functional")
ggsave("custer_pathway_function.png", p, width = 9, height = 6)
p = netVisual_embeddingZoomIn(cellchat, type = "functional")
ggsave("custer_pathway_function2.png", p, width = 8, height = 6)

# 按结构相似性聚类
cellchat <- computeNetSimilarity(cellchat, type = "structural")
cellchat <- netEmbedding(cellchat, type = "structural")
cellchat <- netClustering(cellchat, type = "structural")
# Visualization in 2D-space
p = netVisual_embedding(cellchat, type = "structural")
ggsave("custer_pathway_structure.png", p, width = 9, height = 6)
p = netVisual_embeddingZoomIn(cellchat, type = "structural")
ggsave("custer_pathway_structure2.png", p, width = 8, height = 6)

save(cellchat, file = "cellchat.rds")

custer_pathway_function

custer_pathway_structure

交流探讨:如果您阅读此文有所疑惑,或有不同见解,亦或其他问题,可以点击阅读原文联系探讨。


往期回顾

Barcoding || 海量单细胞的关键技术

单细胞转录组下游分析是否有必要删除线粒体和核糖体基因

细胞亚群注释神器SingleR把它的参考数据库放在了celldex包






如果你对单细胞转录组研究感兴趣,但又不知道如何入门,也许你可以关注一下下面的课程



看完记得顺手点个“在看”哦!


生物 | 单细胞 | 转录组丨资料每天都精彩

长按扫码可关注

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存